package io.github.talelin.latticy.model;

import com.baomidou.mybatisplus.annotation.TableField;
import io.github.talelin.latticy.common.enumeration.*;
import io.github.talelin.latticy.dto.rule.chargeItem.ChargeItemDTO;
import com.baomidou.mybatisplus.annotation.TableName;
import io.github.talelin.latticy.dto.rule.chargeItem.UpdateChargeItemDTO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.beans.BeanUtils;

/**
 * @author generator@wulongbo
 * @since 2022-08-23
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("charge_item")
@AllArgsConstructor
@NoArgsConstructor
public class ChargeItemDO extends BaseModel {


    /**
     * 计费项名称
     */
    private String name;

    /**
     * 计费项类型（1：入库管理；2：出库管理；3：退货管理）
     */
    private FeesBizTypeEnum feesBizType;

    /**
     * 计费维度 （1：按整单来算；2：按每箱来算；3：按每种sku来算）
     */
    private LevelEnum level;

    /**
     * 单据类型（[1,0]:[入库管理:所有的入库];[1,1]:[入库管理:入库&转运];[1,2]:[入库管理:仅入库];[1,3]:[入库管理:仅转运];[2,0]:[出库管理:小包出库];[2,1]:[出库管理:大货出库]；[3,0]:[退货管理:所有的退货];[3,1]:[退货管理:小包退货];[3,2]:[退货管理:FBA退货]）
     */
    private Integer billType;

    /**
     * 计费单位(重量) 1：kg ；2：lb/oz
     */
    private WeightEnum weight;

    /**
     * 计费单位(体积) 1：CBM ；2：CBF
     */
    private SizeEnum size;

    /**
     * 计费模式（1：及时核销，2：事后核销）
     */
    private ModelEnum model;

    /**
     * 描述
     */
    @TableField("`describe`")
    private String describe;

    /**
     * 规则id
     */
    private Integer ruleId;

    public ChargeItemDO(ChargeItemDTO dto, Integer ruleId) {
        BeanUtils.copyProperties(dto, this);
        this.ruleId = ruleId;
    }

    public ChargeItemDO(UpdateChargeItemDTO dto, Integer id) {
        BeanUtils.copyProperties(dto, this);
        this.setId(id);
    }

}
